/**
 * Created by Administrator on 2017/4/11.
 */
export var storage=(function(){
  var Storage = function(type){
    this.storage = null;
    if(typeof('type') === 'undefined' || type === 'local')
      this.storage = window.localStorage;
    else if(type === 'session')
      this.storage = window.sessionStorage;
  }
  Storage.prototype.set=function(key, value){
    this.storage.setItem(key, escape(value));
  }
  Storage.prototype.get=function(key){
    return unescape(this.storage.getItem(key));
  }
  Storage.prototype.remove=function(key){
    this.storage.removeItem(key);
  }
  Storage.prototype.clear=function(){
    this.storage.clear();
  }
  Storage.prototype.key=function(index){
    return this.storage.key(index);
  }
  Storage.prototype.hasKey=function(key)
  {
    for(var i in this.storage){
      if(i === key){
        return true;
      }
    }
    return false;
  }
  Storage.prototype.hasVal=function(value)
  {
    for(var i in this.storage){
      if(unescape(this.storage[i]) === value){
        return true;
      }
    }
    return false;
  }
  Storage.stringify = function(data){
    return JSON.stringify(data);
  }
  Storage.parse = function(data){
    return JSON.parse(data);
  }
  Storage.support = function(){
    if(window.localStorage && window.sessionStorage) return true;
    return false;
  }
  return Storage;
})(window);

// 方法注释
// 1.初始化JsStorage:
//     var storage = new storage('local');
// 其中参数为local或session，不填则默认local,即使用localStorage储存
// 2、储存值：storage.set(key,value);
// 3、通过键获取值：storage.get(key);
// 4、通过键移除值：storage.remove(key);
// 5、清楚所以缓存：storage.clear();
// 6、通过索引获取键：storage.key(index);
// 注释：index为数字索引值
// 7、判读键是否存在：stoarge.hasKey(key);
// 8、判断储存值是否存在：storage.hasVal(value);
// 9、判断是否支持localStorage和sessionStorage：window.storage.support()
// 注释：支持则返回true,不支持返回false
// 10、序列化数据：window.storage.stringify();
// 11、反序列数据：window.storage.parse();
// 其他说明：
// 1、在处理数据时，可以通过window.storage.stringify()和window.storage.parse()进行序列化和发序列化，这样保持数据的原格式
// 2、可以不使用window.storage.stringify()和window.storage.parse()对数据进行操作，但得到的数据不是原来的数据格式
// 如：(1):['a','b','c','d'],进行存储后，使用storage.get()方法得到数据，仍然是一维数组
// (2):['a','b',['c','d'],['f','g']],进行储存后，使用storage.get()方法得到数据，也还是一维数组，并不是这里的二维数组